package com.jiruan.invoicemanagementsystem.controller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


//统一转发处
public class BaseController extends HttpServlet {

    //重写service方法，根据请求的路径，调用对应的方法
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String requestURI=req.getRequestURI();

        int index=requestURI.lastIndexOf("/")+1;
        String mName=requestURI.substring(index);
        Class cla=this.getClass();
        Method method=null;
        try{
            method=cla.getMethod(mName,HttpServletRequest.class,HttpServletResponse.class);
            resp.setContentType("application/json;Charset=utf-8");
            req.setCharacterEncoding("UTF-8");
            method.invoke(this,req,resp);
        }catch (NoSuchMethodException e){
            System.out.println("没有这个"+method.getName()+"方法");
            e.printStackTrace();  //程序在运行时试图调用某个类中 “不存在的方法” 时，JVM 会抛出该异常。
        }catch (IllegalAccessException e){
            System.out.println("你没有这个"+method.getName()+"方法的权限");
            e.printStackTrace();  //：代码试图访问（调用、修改、获取）一个它没有权限访问的类、方法、字段或构造函数时，JVM 会抛出此异常。
        }catch (InvocationTargetException e){
            System.out.println("这个"+method.getName()+"方法内部有问题");
            e.printStackTrace();   //：当通过反射调用某个方法或构造函数时，被调用的方法 / 构造函数内部本身抛出了异常
        }
    }


}

